თავი 5. მონაცემების ამორჩევა ერთზე მეტი ცხრილიდან - ცხრილების გაერთიანება
ე.ფ. კოდდის რეალაციური მოდელის საფუძველს სიმრავლეთა თეორია და პირველი რიგის პრედიკატების გამოანგარიშება წარმოადგენს. SQL ენაში რეალიზებულია სიმრავლეებზე ოპერაციები _ სიმრავლეების: გადაკვეთა, სხვაობა, გაერთიანება.
N სიმრავლეთა გადაკვეთის შედეგია სიმრავლე, რომელის ელემენტები ერთდროულად ეკუთვნის N სიმრავლეს. SQL ენაში სიმრავლეთა გადაკვეთა რეალიზებულია ოპერაციით JOIN _ გადაკვეთა გასაღების მნიშვნელობის მიხედვით ხორციელდება. JOIN წარმოადგენს FROM-ის ნაწილს. JOIN განსაზღვრავს ლოგიკურ ცხრილს, რომელიც ორი ცხრილის დაკავშირების შედეგია. JOIN-ის მოთავსება FROM-ში გასაზღვრავს ცხრილების დაკავშირების თანმიმდევრობას.
SQL-ის სტანდარტით განსაზღვრულია JOIN ოპერაციის შესრულების ხერხები, რომელთაგან ბუნებრივია ოპერაცია INNER JOIN. მას შინაგან გაერთიანებას უწოდებენ. დაუშვათ ჩვენ ვაკავშირებთ ორ ცხრილს ერთი შეიცავს ინფორმაციას სტუდენტის გვარისა და სახელის შესახებ, ხოლო მეორე, კი საგნების ჩამონათვალს, რომლებიც არჩეულ იქნენ სტუდენტების მიერ. მოცემულ მომენტში სტუდენტთა გარკვეულ ნაწილს შეიძლება არ ქონდეთ არჩეული საგანი ან მოცემულ საგანი არცერთი სტუდენტის მიერ არ იქნა არჩეული. INNER JOIN-ით ამოირჩევა მხოლოდ ის სტუდენტები, რომლებსაც საგანი არჩეული აქვთ. ვერ მიიღება იმ სტუდენტების სია, რომლებსაც საგანი ამორჩეული არ აქვთ ან საგნების ნუსხა, რომლებიც არცერთ სტუდენტს არ აქვს არჩეული.
ორი სიმრავლის სხვაობა არის სიმრავლე, რომელიც შედგება პირველი ცხრილის იმ ელემენტებისგან, რომლებიც არ ეკუთვნიან მეორე სიმრავლეს. SQL ენაში სიმრავლეთა სხვაობა რეალიზებულია ოპერაციით OUTER JOIN ან EXEPT
ორი სიმრავლის გაერთიანება არის სიმრავლე, რომელიც შედგება ორივე სიმრავლის ელემენტებისგან იმ განსხვავებით, რომ საშედეგო სიმრავლეში ორივე სიმრავლეში არსებული ერთიდაიგივე ელემენტი ერთხელ არის ჩაწერილი.
5.1. შინაგანი გაერთიანება INNER JOIN
უმრავლეს შემთხვევაში JOIN-ით აკავშირებენ ერთი ცხრილის პირველად გასაღებს მეორე ცხრილის გარე გასაღებთან. ორივე გასაღები ერთიდაიგივე მონაცემის ტიპით უნდა იყოს აღწერილი. ამავე დროს JOIN-ით შესაძლებელია ორი ცხრილის დაკავშირება ერთნაირი ტიპის მონაცემების მქონე ნებისმიერი სვეტებით. ზოგადად ერთი სიმბოლური სტრიქონი, თარიღის ტიპის სვეტი შეიძლება დაკავშირებულ იქნეს მეორე ცხრილის სიმბოლურ სტრიქონთან ან გამოსახულებასთან, ან თარიღის ტიპის სვეტთან.
INNER JOIN-ის შემადგენელი ნაწილია მეორე ცხრილისდასახელების შემდეგ დაწერილი პირობა ON ან USING, რომელიც სისტემას მიუთითებს დაკავშირების ხერხს. სისტემა ერთი ცხრილის ყოველ სტრიქონს ლოგიკურად აერთიანებს მეორე ცხრილის სტრიქონთან, რომელსაც დეკარტეს ნამრავლს უწოდებენ. ჩანაწერების ამორჩევის მიზნით შემდეგ გამოიყენება ON ან USING პირობაში მითითებული კრიტერიუმი. მაგალითად:
SELECT tbsaqoneli.das, tbsaq_mireba.tariri, tbsaq_mireba.raodenoba
FROM tbsaqoneli INNER JOIN tbsaq_mireba ON tbsaqoneli.nomeri = tbsaq_mireba.saq_nomeri
აქ ნაჩვენებია, რომ ადგილი აქვს შინაგან გაერთიანებას INNER JOIN-ის დასაკავშირებელი ცხრილის სახელია დაწერილი - tbsaqoneli, მის შემდეგ მეორე ცხრილის სახელი - tbsaq_mireba, ხოლო ON პირობის შემდეგ ცხრილების დაკავშირების პირობა, კერძოდ ცხრილი tbsaqoneli ცხრილთან tbsaq_mireba დაკავშირებულია ველით ”საქონლის ნომერი” (ცხრილებში მათ განსხვავებული სახელები აქვთ, მაგრამ შინაარსობრივად იდენტურნი არიან).
პრაქტიკულ ამოცანებში ორი ცხრილის დაკავშირება საკმარისი არ არის, დაკავშირება ხორციელდება სამი, ოთხი და ა.შ. ცხრილების. ამ სემთხვევაში INNER JOIN რამდენჯერმე გამოიყენება
SELECT tbsawyobi.dasaxeleba, tbsaqoneli.das, tbsaq_mireba.tariri, tbsaq_mireba.raodenoba
FROM tbsawyobi INNER JOIN (tbsaqoneli INNER JOIN tbsaq_mireba ON tbsaqoneli.nomeri = tbsaq_mireba.saq_nomeri) ON tbsawyobi.nomeri = tbsaq_mireba.saw_nomeri
ამ მაგალითში ცხრილი tbsawyobi დაკავშირებულია ცხრილების tbsaqoneli და tbsaq_mireba გართიანებასთან. დაკავშირების პირობაა tbsawyobi.nomeri = tbsaq_mireba.saw_nomeri.
განვიხილოთ ურთირთდაკავშირებული ცხრილებიდან ამორჩევის მაგალითი. დავაკავშიროთ ერთმანეთან ჩვენს მიერ დაპროექტებული ცხრილები: tbsawyobi, tbsaqoneli, tbsaq_mireba/სურ. 12/